package com.sinosoft.ptas.service;

import java.util.List;

import javax.validation.Valid;

import com.sinosoft.framework.core.common.exception.BusinessException;
import com.sinosoft.ptas.entity.TargetsOfImplPhaseEntity;
/**
 * 实施期目标管理接口定义
 * @author lianWuJun
 * @time   2017年2月18日 下午6:40:59
 */
public interface TargetsOfImplPhaseService {
	
	/**
	 * 创建实施期目标
	 * 创建实施期目标成功之后，继续批量添加指标，批量添加年度目标
	 * @param targetsOfImplPhaseEntity
	 * @return 实施期目标的标号
	 */
	public String  createTargetsOfImplPhase(TargetsOfImplPhaseEntity targetsOfImplPhaseEntity) throws BusinessException;
	
	/**
	 * 根据实施期目标编号查询实施期目标
	 * @param id
	 * @return 实施期目标类型实体
	 */
	public TargetsOfImplPhaseEntity retrieveTargetsOfImplPhaseById(String id);
	
	/**
	 * 根据实施期目标类的属性查询实施期目标（根据reportId查询实施期目标集合的查询）
	 * @param targetsOfImplPhaseEntity
	 * @return 实施期目标类型集合
	 */
	public List<TargetsOfImplPhaseEntity> retrieveTargetsOfImplPhases(TargetsOfImplPhaseEntity targetsOfImplPhaseEntity);
	
	/**
	 * 更新实施期目标 
	 * 先更新实施期目标，以及删除绑定在它下的年度目标，指标，
	 * 再创批量创建年度目标，批量创建指标
	 * @param targetsOfImplPhaseEntity 实施期目标实体
	 * @return true或false
	 */
	public void updateTargetsOfImplPhase(@Valid TargetsOfImplPhaseEntity targetsOfImplPhaseEntity) throws BusinessException;
	
	/**
	 * 根据id删除实施期目标  以及绑定在它下面的指标和年度目标
	 * @param id 实施期目标id
	 */
	public void deleteTargetsOfImplPhaseById(String id) throws BusinessException;
	
	/**
	 * 根据审核表编号查询实施期目标
	 * @param reportId
	 * @return 实施期目标集合
	 */
	public List<TargetsOfImplPhaseEntity> retrieveTargetsPhaseByReportId(String reportId);
	
	/**
	 * 根据组织机构id和行政区划编码查询出司局下面所挂省的实施期目标
	 * @param devisionCode 行政区划代码
	 * @param oid 组织机构代码
	 * @return List<TargetsOfImplPhaseEntity> 实施期目标列表
	 */
	public List<TargetsOfImplPhaseEntity> retrieveTargetsPhaseByDivisionCodeAndOrgId(String divisionCode,String oid);
	
	/**
	 * 批量更新年度目标 
	 * @param targetsOfImplPhaseList
	 */
	public void updateTargetsOfImplPhaseList(List<TargetsOfImplPhaseEntity> targetsOfImplPhaseList);
	

}
